package com.museum.guide.controller;

import com.museum.guide.common.result.Result;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

@RestController
@RequestMapping("/file")
public class FileController {

    @Value("${file.upload.path}")
    private String uploadPath;

    /**
     * 文件上传
     *
     * @param file 上传的文件
     * @return 文件访问路径
     */
    @PostMapping("/upload")
    public Result<String> upload(@RequestParam("file") MultipartFile file) {
        try {
            // 获取原始文件名
            String originalFilename = file.getOriginalFilename();
            // 获取文件后缀
            String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));

            // 生成日期目录
            String dateDir = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));
            // 生成新的文件名
            String fileName = UUID.randomUUID() + suffix;

            // 完整的文件存储路径
            String fullPath = uploadPath + dateDir + File.separator;
            // 创建目标文件夹
            File dir = new File(fullPath);
            if (!dir.exists()) {
                dir.mkdirs();
            }

            // 创建目标文件
            File destFile = new File(fullPath + fileName);
            // 保存文件
            file.transferTo(destFile);

            // 返回相对访问路径
            String relativePath = "/files/" + dateDir + "/" + fileName;
            return Result.success(relativePath);
        } catch (IOException e) {
            return Result.error("文件上传失败");
        }
    }

    /**
     * 删除文件
     *
     * @param filePath 文件相对路径
     * @return 操作结果
     */
    @DeleteMapping("/delete")
    public Result<Void> deleteFile(@RequestParam("filePath") String filePath) {
        // 去除路径中的 /files 前缀
        String relativePath = filePath.replace("/files/", "");
        File file = new File(uploadPath + relativePath);
        if (file.exists() && file.isFile()) {
            if (file.delete()) {
                return Result.success();
            }
        }
        return Result.error("文件删除失败");
    }
}